package com.hr.剑指offer.work1;

/**
 * @author 周恒哲
 * @date 2020/06/16
 **/
public class 面试题21_调整数组顺序使奇数位于偶数前面 {
    //暴力法
    public int[] exchange(int[] nums) {
        if (nums==null||nums.length==0){
            return nums;
        }
        int left=0;
        int right=nums.length-1;
        int[] res=new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            if ((nums[i]&1)==0){//偶数
                res[right--]=nums[i];
            }else{
                res[left++]=nums[i];
            }
        }
        return res;
    }

    /**
     * 双指针
     *     初始化： ii , jj 双指针，分别指向数组 numsnums 左右两端；
     *     循环交换： 当 i = ji=j 时跳出；
     *     指针 ii 遇到奇数则执行 i = i + 1i=i+1 跳过，直到找到偶数；
     *     指针 jj 遇到偶数则执行 j = j - 1j=j−1 跳过，直到找到奇数；
     *     交换 nums[i]nums[i] 和 nums[j]nums[j] 值；
     *     返回值： 返回已修改的 numsnums 数组。
     */
    public int[] exchange2(int[] nums) {
        if (nums==null||nums.length==0){
            return nums;
        }
        int left=0;
        int right=nums.length-1;
        int temp;
        while (left<right){
            while (left<right&&(nums[left]&1)==1){//奇数
                left++;
            }
            while (left<right&&(nums[right]&1)==0){//偶数
                right--;
            }
           temp=nums[left];
            nums[left]=nums[right];
            nums[right]=temp;
        }
        return nums;
    }
}
